Complex Aggregation Query তৈরি এবং বাস্তবায়ন

Java Technologies - জাভা মঙ্গোডিবি (Java MongoDB) - Aggregation Framework
138

MongoDB-তে Aggregation অপারেশনগুলি অত্যন্ত শক্তিশালী এবং কার্যকরী, বিশেষ করে যখন আপনি বিভিন্ন ধরনের ডেটা প্রসেসিং (যেমন গোষ্ঠীভুক্তকরণ, ফিল্টারিং, Sorting, Joining) করতে চান। MongoDB-এর Aggregation Framework ব্যবহার করে আপনি জটিল কোয়্যারী করতে পারেন যা অনেক স্টেপ এবং অপারেশন জড়িত থাকে।

Java MongoDB Driver এর মাধ্যমে Aggregation Queries তৈরি ও বাস্তবায়ন করা যেতে পারে। এখানে, আমরা Complex Aggregation Query তৈরি এবং Java-তে বাস্তবায়ন করার পদ্ধতি দেখব।


MongoDB Aggregation Framework:

MongoDB-এর Aggregation Framework সাধারণত একটি পাইপলাইন পদ্ধতিতে কাজ করে। এই ফ্রেমওয়ার্কে $match, $group, $sort, $project, $unwind, এবং অন্যান্য অনেক স্টেপ ব্যবহার করা হয়।

Aggregation Pipeline Operators:

  • $match: ডেটার মধ্যে ফিল্টারিং করে শুধুমাত্র নির্দিষ্ট ডকুমেন্টগুলো নির্বাচন করে।
  • $group: ডেটাকে গ্রুপ করে এবং গোষ্ঠীভুক্ত ডেটার উপর ফাংশন (যেমন, COUNT, SUM, AVG) প্রয়োগ করে।
  • $sort: ডেটাকে কোনো নির্দিষ্ট কন্ডিশনে সাজায়।
  • $project: নির্দিষ্ট ফিল্ড বা ডেটার কাঠামো পরিবর্তন করে।
  • $unwind: অ্যারে ডেটাকে একক ডকুমেন্টে রূপান্তরিত করে।

Complex Aggregation Query উদাহরণ:

ধরা যাক, আমাদের একটি students নামক কোলেকশন রয়েছে, যেখানে স্টুডেন্টদের তথ্য রাখা আছে। আমরা চাই এমন একটি complex aggregation query তৈরি করতে যা নিম্নলিখিত কাজ করবে:

  1. Age এর উপর ভিত্তি করে গ্রুপিং (যেমন, ছাত্রদের বয়সের মধ্যে গোষ্ঠী তৈরি করা)।
  2. প্রতিটি বয়সের জন্য ছাত্রদের গড় স্কোর বের করা।
  3. Grade এর উপর ভিত্তি করে সাজানো (যে গ্রেডে বেশি ছাত্র রয়েছে সেই গ্রেডটি প্রথমে দেখানো হবে)।
  4. শুধুমাত্র সেগুলি প্রদর্শন করা যাদের গড় স্কোর ৫০ এর উপরে।

MongoDB Aggregation Query (Mongo Shell):

db.students.aggregate([
    { $match: { score: { $gte: 50 } } },  // Filter students with score >= 50
    { $group: { 
        _id: "$age",  // Grouping by age
        avgScore: { $avg: "$score" },  // Calculating average score for each age group
        count: { $sum: 1 }  // Counting the number of students in each group
    }},
    { $sort: { count: -1 } },  // Sorting by the number of students in each age group
    { $project: { _id: 0, age: "$_id", avgScore: 1, count: 1 } }  // Projecting the required fields
])

Java MongoDB Code: Complex Aggregation Query বাস্তবায়ন:

এখন আমরা উপরের MongoDB অ্যাগ্রিগেশন কোয়্যারিটি Java-তে MongoDB Java Driver ব্যবহার করে বাস্তবায়ন করব।

Java Code:

import com.mongodb.MongoClient;
import com.mongodb.client.AggregateIterable;
import com.mongodb.client.MongoCollection;
import com.mongodb.client.MongoDatabase;
import org.bson.Document;

import java.util.Arrays;

public class ComplexAggregationExample {
    public static void main(String[] args) {
        // MongoClient তৈরি করা
        MongoClient mongoClient = new MongoClient("localhost", 27017);
        
        // ডেটাবেস নির্বাচন করা
        MongoDatabase database = mongoClient.getDatabase("school");

        // students কোলেকশন নির্বাচন করা
        MongoCollection<Document> collection = database.getCollection("students");

        // Aggregation Pipeline তৈরি করা
        AggregateIterable<Document> result = collection.aggregate(Arrays.asList(
            // Filter students with score >= 50
            new Document("$match", new Document("score", new Document("$gte", 50))),
            
            // Group by age, calculate average score and count the number of students
            new Document("$group", new Document("_id", "$age")
                                        .append("avgScore", new Document("$avg", "$score"))
                                        .append("count", new Document("$sum", 1))),
            
            // Sort by count in descending order
            new Document("$sort", new Document("count", -1)),
            
            // Project the required fields
            new Document("$project", new Document("_id", 0)
                                        .append("age", "$_id")
                                        .append("avgScore", 1)
                                        .append("count", 1))
        ));

        // ফলাফল প্রিন্ট করা
        for (Document doc : result) {
            System.out.println(doc.toJson());
        }

        // MongoClient বন্ধ করা
        mongoClient.close();
    }
}

ব্যাখ্যা:

  1. MongoClient: MongoDB সার্ভারে সংযোগ তৈরি করতে MongoClient ব্যবহার করা হয়েছে।
  2. Aggregation Pipeline: aggregate() মেথডের মধ্যে Arrays.asList() ব্যবহার করে আমরা একাধিক স্টেপ (ম্যাচ, গ্রুপ, সাজানো, এবং প্রজেক্ট) সংজ্ঞায়িত করেছি।
  3. $match: score ফিল্টার ব্যবহার করে আমরা এমন ছাত্রদের খুঁজে বের করেছি যাদের স্কোর ৫০ এর বেশি।
  4. $group: ছাত্রদের age অনুযায়ী গ্রুপিং করে, এবং প্রতি গ্রুপের গড় স্কোর এবং ছাত্র সংখ্যা গণনা করেছি।
  5. $sort: ছাত্র সংখ্যা অনুযায়ী গ্রুপগুলো সাজানো হয়েছে।
  6. $project: আমরা শুধুমাত্র age, avgScore, এবং count ফিল্ডগুলো প্রজেক্ট করেছি, _id বাদ দিয়েছি।

Output:

{"age":25,"avgScore":72.5,"count":10}
{"age":22,"avgScore":65.0,"count":8}
{"age":30,"avgScore":60.5,"count":5}
...

এখানে, ফলাফলটি বিভিন্ন বয়সের ভিত্তিতে ছাত্রদের গড় স্কোর এবং প্রতিটি বয়সের ছাত্রদের সংখ্যা দেখাচ্ছে। এটি MongoDB Aggregation Framework এর মাধ্যমে জটিল ডেটা প্রসেসিং এবং বিশ্লেষণ করার একটি উদাহরণ।


MongoDB-এর Aggregation Framework একটি অত্যন্ত শক্তিশালী টুল যা বিভিন্ন জটিল ডেটা বিশ্লেষণ এবং প্রসেসিংয়ের জন্য ব্যবহৃত হয়। Java MongoDB Driver দিয়ে complex aggregation queries বাস্তবায়ন করা খুবই সহজ, যেখানে $match, $group, $sort, $project, $unwind ইত্যাদি স্টেপগুলো ব্যবহার করে ডেটা চমৎকারভাবে প্রসেস এবং বিশ্লেষণ করা যায়। MongoDB-এর এই ক্ষমতা Java অ্যাপ্লিকেশনগুলিতে ডেটা স্টোরেজ এবং বিশ্লেষণের জন্য অনেক কার্যকরী হয়ে ওঠে।

Content added By
Promotion
NEW SATT AI এখন আপনাকে সাহায্য করতে পারে।

Are you sure to start over?

Loading...